home *** CD-ROM | disk | FTP | other *** search
/ Everything For A Hacker / 19990506-[HACK].iso / SECURE / CRYPT / GOST.ZIP / MAKE1KEY.C < prev    next >
C/C++ Source or Header  |  1995-02-21  |  3KB  |  107 lines

  1. /*-----------------------------------------------------
  2.   Make1Key.c -- óδαáí«Γ¬á  «ñ¡«ú«  ¬α¿»Γ«úαáΣ¿τÑ߬«ú«
  3.                 ¬½ετá ß »«¼«Θ∞ε "φ½Ñ¬Γα«¡¡«⌐ απ½ÑΓ¬¿"
  4.   -----------------------------------------------------
  5.   Éáºαáí«Γá½ Ç.₧.é¿¡«¬πα«ó, ú.î«ß¬óá, ΣÑóαá½∞ 1995 ú.
  6.   (c) 1995, æó«í«ñ¡«Ñ  ¿ß»«½∞º«óá¡¿Ñ  ¿  ¬«»¿α«óá¡¿Ñ.
  7.   -----------------------------------------------------
  8.   ¥Γá »α«úαá¼¼á ß»Ñµ¿á½∞¡« αáºαáí«Γá¡á ñ½∩ »πí½¿¬áµ¿¿
  9.   ó "î«¡¿Γ«αÑ".
  10.   -----------------------------------------------------
  11. */
  12. #pragma  inline
  13.  
  14. #include <conio.h>    // kbhit,getch
  15. #include <dos.h>    // delay
  16. #include <stdio.h>    // printf,fopen,fclose,putc,...
  17. #include <stdlib.h>    // atoi
  18.  
  19. unsigned char port61h;
  20.  
  21. // Åα«Γ«Γ¿»δ Σπ¡¬µ¿⌐
  22. void    timer2(unsigned short count);
  23. unsigned short get2channel(void);
  24.  
  25. // â½áó¡á∩ »α«úαá¼¼á
  26.  
  27. int    main(int argc, char *argv[])
  28. {
  29.   printf("Åα«úαá¼¼á óδαáí«Γ¬¿ 1 ¬½ετá ß »«¼«Θ∞ε "
  30.      "φ½Ñ¬Γα«¡¡«ú« á¡á½«úá απ½ÑΓ¬¿.\n"
  31.      "æ«ßΓáó¿½ Ç.₧.é¿¡«¬πα«ó, ∩¡óáα∞ 1995 ú«ñá,"
  32.      " ßó«í«ñ¡«Ñ ¿ß»«½∞º«óá¡¿Ñ ¿ ¬«»¿α«óá¡¿Ñ\n");
  33.  
  34.   if ( argc < 2  ||  argc > 3 )
  35.     return printf(
  36. "諼á¡ñá ºá»π߬á: \"make1key Σá⌐½ [ñ½¿¡á]\"  ,úñÑ:\n"
  37. "  Σá⌐½  - ¿¼∩ Σá⌐½á ñ½∩ ºá»¿ß¿ ¬½ετá\n"
  38. "  ñ½¿¡á - ñ½¿¡á ¬½ετá ó íá⌐Γáσ, »« π¼«½τá¡¿ε - 32\n"
  39.     ),-1;
  40.   else
  41.   {
  42.     unsigned short length=32;
  43.     FILE *key=fopen(argv[1],"wb");
  44.  
  45.     if(!key)
  46.     {
  47.       printf(
  48.       "ìÑ ¼«úπ «Γ¬αδΓ∞ Σá⌐½ ¬½ετá \"%s\" ñ½∩ ºá»¿ß¿\n",
  49.       argv[1]);
  50.       return 1;
  51.     }
  52.     if (argc==3) length=atoi(argv[2]);
  53.     timer2(256);
  54.     printf("ìᪿ¼á⌐ ¡á ½εíδÑ ¬½áó¿Φδ :");
  55.     while(length--)
  56.     {
  57.       while (delay(300),kbhit())
  58.         getch(),putchar('\007'),timer2(256);
  59.       getch();
  60.       if (putc(get2channel(),key)==EOF)
  61.     return printf("ÄΦ¿í¬á ¡á Σá⌐½Ñ ¬½ετá\n"),1;
  62.       putchar('.');
  63.     }
  64.     asm {
  65.       mov   AL,port61h
  66.       out   0x61,AL
  67.     }
  68.     putchar('\n');
  69.     return fclose(key) ?
  70.     (printf("ÄΦ¿í¬á ¡á Σá⌐½Ñ ¬½ετá\n"),1) :
  71.     (printf("è½ετ ßúÑ¡Ñα¿α«óá¡\n"),0) ;
  72.   }
  73. }
  74. // »α«µÑñπαá »α«úαá¼¼¿α«óá¡¿∩ 2 ¬á¡á½á Γá⌐¼Ñαá
  75. void    timer2(unsigned short count)
  76. {
  77.   asm {
  78.     mov     AL,0xb4 // çáúαπªáѼ ó Γá⌐¼Ñα
  79.     out     0x43,AL //   π»αáó½∩εΘÑÑ ß½«ó«
  80.     mov        AX,count// AX <- ¼½áñΦ¿⌐ íá⌐Γ ¬«¡ßΓá¡Γδ
  81.     out     0x42,AL // ºáúαπªáѼ ¼½áñΦ¿⌐ íá⌐Γ ó Γá⌐¼Ñα
  82.     mov     AL,AH   // AL <- ßΓáαΦ¿⌐ íá⌐Γ ¬«¡ßΓá¡Γδ
  83.     out        0x42,AL // ºáúαπªáѼ ßΓáαΦ¿⌐ íá⌐Γ ó Γá⌐¼Ñα
  84.     in      AL,0x61 // AL <- ß«ßΓ«∩¡¿Ñ »«αΓá 61h
  85.     mov     port61h,AL  // ß«σαá¡∩Ѽ ß«ßΓ«∩¡¿Ñ  
  86.     or      AL,1    // αáºαÑΦáѼ αáí«Γπ 2 ¬á¡á½á
  87.     out     0x61,AL // ...
  88.   }
  89.   return;
  90. }
  91. // »α«µÑñπαá ßτ¿Γδóá¡¿∩ »«¬áºá¡¿∩ 2 ¬á¡á½á Γá⌐¼Ñαá
  92. unsigned short get2channel(void)
  93. {
  94.   asm {
  95.     mov     AL,0x86 // Σ¿¬ß¿απѼ ñá¡¡δÑ
  96.     out     0x43,AL // 2-ú« ¬á¡á½á Γá⌐¼Ñαá
  97.     jmp     inpt    // ¡á óß∩¬¿⌐ ß½πτá⌐
  98.   }
  99.   inpt: asm {
  100.     in      AL,0x42 // ßτ¿ΓδóáѼ ¼½áñΦ¿⌐ íá⌐Γ
  101.     mov     AH,AL   // «ßó«í«ªñáѼ AL
  102.     in      AL,0x42 // ßτ¿ΓδóáѼ ßΓáαΦ¿⌐ íá⌐Γ
  103.     xchg    AH,AL   // íá⌐Γδ ó «íαáΓ¡«¼ »«α∩ñ¬Ñ
  104.   }
  105.   return _AX;
  106. }
  107.